// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CC_TREES_MUTATOR_HOST_CLIENT_H_
#define CC_TREES_MUTATOR_HOST_CLIENT_H_

#include "cc/trees/element_id.h"
#include "cc/trees/property_animation_state.h"
#include "cc/trees/target_property.h"

namespace gfx {
class Transform;
class ScrollOffset;
}

namespace cc {

class FilterOperations;

enum class ElementListType { ACTIVE,
    PENDING };

class MutatorHostClient {
public:
    virtual bool IsElementInList(ElementId element_id,
        ElementListType list_type) const = 0;

    virtual void SetMutatorsNeedCommit() = 0;
    virtual void SetMutatorsNeedRebuildPropertyTrees() = 0;

    virtual void SetElementFilterMutated(ElementId element_id,
        ElementListType list_type,
        const FilterOperations& filters)
        = 0;
    virtual void SetElementOpacityMutated(ElementId element_id,
        ElementListType list_type,
        float opacity)
        = 0;
    virtual void SetElementTransformMutated(ElementId element_id,
        ElementListType list_type,
        const gfx::Transform& transform)
        = 0;
    virtual void SetElementScrollOffsetMutated(
        ElementId element_id,
        ElementListType list_type,
        const gfx::ScrollOffset& scroll_offset)
        = 0;

    // Allows to change IsAnimating value for a set of properties.
    virtual void ElementIsAnimatingChanged(
        ElementId element_id,
        ElementListType list_type,
        const PropertyAnimationState& mask,
        const PropertyAnimationState& state)
        = 0;

    virtual void ScrollOffsetAnimationFinished() = 0;
    virtual gfx::ScrollOffset GetScrollOffsetForAnimation(
        ElementId element_id) const = 0;
};

} // namespace cc

#endif // CC_TREES_MUTATOR_HOST_CLIENT_H_
